import moment from 'moment';

/**
 * 格式化日期时间显示
 * @param {Date|String|Number} dateTime - 日期时间
 * @param {Boolean} showTime - 是否显示时间，默认为true
 * @param {Boolean} newLine - 是否换行显示，默认为false
 * @returns {String} 格式化后的日期时间字符串
 */
export function formatDateTime(dateTime, showTime = true, newLine = false) {
	const date1 = moment(moment(dateTime).format('YYYY-MM-DD'))
	const now = moment().format('YYYY-MM-DD');


	const date = moment(dateTime)

	// 计算日期差
	const diffDays = date1.diff(now, 'days');

	let dateStr = '';

	if (diffDays === 0) {
		dateStr = '今天';
	} else if (diffDays === 1) {
		dateStr = '明天';
	} else if (diffDays === 2) {
		dateStr = '后天';
	} else {
		// 后续日期显示为 yyyy-mm-dd 格式
		dateStr = date.format('YYYY-MM-DD');
	}

	if (!showTime) {
		return dateStr;
	}

	// 格式化时间部分
	const hour = date.hour();
	const minute = date.minute();

	let timeStr = '';
	if (hour < 6) {
		timeStr = `凌晨${hour}:${minute.toString().padStart(2, '0')}`;
	} else if (hour < 12) {
		timeStr = `上午${hour}:${minute.toString().padStart(2, '0')}`;
	} else if (hour < 18) {
		timeStr = `下午${hour}:${minute.toString().padStart(2, '0')}`;
	} else {
		timeStr = `晚上${hour}:${minute.toString().padStart(2, '0')}`;
	}

	const separator = newLine ? '\n' : ' ';
	return `${dateStr}${separator}${timeStr}`;
}

/**
 * 获取标准格式的日期时间字符串
 * @param {Date|String|Number} dateTime - 日期时间
 * @returns {String} YYYY-MM-DD HH:mm:ss 格式的字符串
 */
export function getStandardDateTime(dateTime) {
	return moment(dateTime).format('YYYY-MM-DD HH:mm:ss');
}

/**
 * 获取相对时间描述
 * @param {Date|String|Number} dateTime - 日期时间
 * @returns {String} 相对时间描述
 */
export function getRelativeTime(dateTime) {
	const date = moment(dateTime);
	const now = moment();

	const diffMinutes = date.diff(now, 'minutes');
	const diffHours = date.diff(now, 'hours');
	const diffDays = date.diff(now, 'days');

	if (diffMinutes < 0) {
		return '已过期';
	} else if (diffMinutes < 60) {
		return `${diffMinutes}分钟后`;
	} else if (diffHours < 24) {
		return `${diffHours}小时后`;
	} else if (diffDays < 7) {
		return `${diffDays}天后`;
	} else {
		return date.format('MM月DD日');
	}
}

/**
 * 检查是否为今天
 * @param {Date|String|Number} dateTime - 日期时间
 * @returns {Boolean}
 */
export function isToday(dateTime) {
	return moment(dateTime).isSame(moment(), 'day');
}

/**
 * 检查是否为明天
 * @param {Date|String|Number} dateTime - 日期时间
 * @returns {Boolean}
 */
export function isTomorrow(dateTime) {
	return moment(dateTime).isSame(moment().add(1, 'day'), 'day');
}

/**
 * 检查是否为后天
 * @param {Date|String|Number} dateTime - 日期时间
 * @returns {Boolean}
 */
export function isDayAfterTomorrow(dateTime) {
	return moment(dateTime).isSame(moment().add(2, 'day'), 'day');
}

/**
 * 获取时间段描述
 * @param {Number} hour - 小时 (0-23)
 * @returns {String} 时间段描述
 */
export function getTimePeriod(hour) {
	if (hour < 6) {
		return '凌晨';
	} else if (hour < 12) {
		return '上午';
	} else if (hour < 18) {
		return '下午';
	} else {
		return '晚上';
	}
}

/**
 * 格式化时间显示
 * @param {Number} hour - 小时
 * @param {Number} minute - 分钟
 * @returns {String} 格式化后的时间字符串
 */
export function formatTime(hour, minute) {
	const period = getTimePeriod(hour);
	return `${period}${hour}:${minute.toString().padStart(2, '0')}`;
}

export default {
	formatDateTime,
	getStandardDateTime,
	getRelativeTime,
	isToday,
	isTomorrow,
	isDayAfterTomorrow,
	getTimePeriod,
	formatTime
};